describe('图书管理应用 - 完整流程测试', () => {
  beforeEach(() => {
    cy.visit('/');
    
    // 模拟 HarmonyOS 环境
    cy.window().then((win) => {
      win.HarmonyOS = true;
      win.HarmonyBridge = {
        camera: {
          open: cy.stub().resolves({ success: true }),
          takePhoto: cy.stub().resolves({
            webPath: 'mock-photo.jpg',
            format: 'jpeg'
          })
        },
        storage: {
          setItem: cy.stub().resolves({ success: true }),
          getItem: cy.stub().resolves({ value: 'mock-value' })
        }
      };
    });
  });

  describe('应用启动和导航', () => {
    it('应用应该正确启动并显示首页', () => {
      cy.get('ion-title').should('be.visible');
      cy.get('ion-searchbar').should('be.visible');
      cy.url().should('include', '/tabs/home');
    });

    it('应该能够在不同页面间导航', () => {
      // 导航到搜索页面
      cy.get('[data-cy="search-tab"]').click();
      cy.url().should('include', '/tabs/search');
      
      // 导航到更多页面
      cy.get('[data-cy="more-tab"]').click();
      cy.url().should('include', '/tabs/more');
      
      // 返回首页
      cy.get('[data-cy="home-tab"]').click();
      cy.url().should('include', '/tabs/home');
    });
  });

  describe('图书搜索功能', () => {
    beforeEach(() => {
      cy.visit('/tabs/search');
    });

    it('应该能够搜索图书', () => {
      cy.get('ion-searchbar input')
        .type('Java')
        .should('have.value', 'Java');
      
      // 验证搜索结果
      cy.get('[data-cy="search-results"]')
        .should('be.visible')
        .find('.book-item')
        .should('have.length.greaterThan', 0);
    });

    it('应该显示热门搜索标签', () => {
      cy.get('ion-chip').should('have.length.greaterThan', 0);
      
      // 点击热门标签
      cy.get('ion-chip').first().click();
      
      // 验证搜索结果更新
      cy.get('[data-cy="search-results"]').should('be.visible');
    });

    it('应该能够清空搜索', () => {
      cy.get('ion-searchbar input').type('Java');
      cy.get('ion-searchbar input').clear();
      
      // 验证显示所有结果
      cy.get('[data-cy="search-results"]')
        .find('.book-item')
        .should('have.length.greaterThan', 0);
    });
  });

  describe('图书详情和借阅', () => {
    it('应该能够查看图书详情', () => {
      cy.visit('/tabs/home');
      
      // 点击第一本图书
      cy.get('[data-cy="book-item"]').first().click();
      
      // 验证跳转到图书详情页
      cy.url().should('include', '/tabs/book');
      cy.get('[data-cy="book-title"]').should('be.visible');
      cy.get('[data-cy="book-author"]').should('be.visible');
    });

    it('应该能够借阅图书', () => {
      cy.visit('/tabs/book');
      
      // 点击借阅按钮
      cy.get('[data-cy="borrow-button"]').click();
      
      // 验证跳转到借阅页面
      cy.url().should('include', '/tabs/borrow');
      
      // 填写借阅信息
      cy.get('[data-cy="borrower-name"]').type('测试用户');
      cy.get('[data-cy="borrow-days"]').select('7');
      
      // 提交借阅
      cy.get('[data-cy="submit-borrow"]').click();
      
      // 验证借阅成功
      cy.get('[data-cy="success-message"]').should('be.visible');
    });
  });

  describe('相机功能测试', () => {
    it('应该能够打开相机（HarmonyOS）', () => {
      cy.visit('/tabs/my');
      
      // 点击相机按钮
      cy.get('[data-cy="camera-button"]').click();
      
      // 验证相机调用
      cy.window().then((win) => {
        expect(win.HarmonyBridge.camera.open).to.have.been.called;
      });
    });

    it('应该处理相机权限', () => {
      // 模拟权限被拒绝
      cy.window().then((win) => {
        win.HarmonyBridge.camera.open = cy.stub().rejects(new Error('权限被拒绝'));
      });
      
      cy.visit('/tabs/my');
      cy.get('[data-cy="camera-button"]').click();
      
      // 验证错误处理
      cy.get('[data-cy="error-message"]').should('be.visible');
    });
  });

  describe('响应式设计测试', () => {
    const viewports = [
      { width: 320, height: 568 }, // iPhone SE
      { width: 375, height: 667 }, // iPhone 8
      { width: 414, height: 896 }, // iPhone 11
      { width: 768, height: 1024 }, // iPad
      { width: 1024, height: 768 }  // iPad 横屏
    ];

    viewports.forEach(viewport => {
      it(`应该在 ${viewport.width}x${viewport.height} 分辨率下正常显示`, () => {
        cy.viewport(viewport.width, viewport.height);
        cy.visit('/');
        
        // 验证关键元素可见
        cy.get('ion-title').should('be.visible');
        cy.get('ion-searchbar').should('be.visible');
        cy.get('ion-tab-bar').should('be.visible');
      });
    });
  });

  describe('性能测试', () => {
    it('页面加载时间应该在合理范围内', () => {
      cy.visit('/', {
        onBeforeLoad: (win) => {
          win.performance.mark('start');
        },
        onLoad: (win) => {
          win.performance.mark('end');
          win.performance.measure('pageLoad', 'start', 'end');
        }
      });

      cy.window().then((win) => {
        const measure = win.performance.getEntriesByName('pageLoad')[0];
        expect(measure.duration).to.be.lessThan(3000); // 3秒内加载完成
      });
    });

    it('应该能够处理大量数据', () => {
      // 模拟大量图书数据
      cy.intercept('GET', '/api/books', {
        fixture: 'large-book-list.json'
      });

      cy.visit('/tabs/search');
      
      // 验证列表渲染性能
      cy.get('[data-cy="search-results"]', { timeout: 5000 })
        .should('be.visible')
        .find('.book-item')
        .should('have.length.greaterThan', 100);
    });
  });
});